class CargosController < ApplicationController
#MODULE: Configuraciones

  before_filter :find_jerarquia, :only => [:edit, :show]

  # GET /cargos
  # GET /cargos.xml
  def index
  end

  # GET /cargos/1
  # GET /cargos/1.xml
  def show
    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @cargo }
    end
  end

  # GET /cargos/new
  # GET /cargos/new.xml
  def new
    @cargo  = Cargo.new
    @cargos = Cargo.all
    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @cargo }
    end
  end

  # GET /cargos/1/edit
  def edit
    @cargos = Cargo.all - @subordinados - @pares - @superiores
  end

  # POST /cargos
  # POST /cargos.xml
  def create
    @cargo = Cargo.new(params[:cargo])

    respond_to do |format|
      if @cargo.save
        @cargo.update_jerarquias(params[:jerarquias])
        flash[:notice] =  'Cargo creada correctamente.'
        format.html { params[:oper].nil? ? redirect_to(@cargo) : render(:text => "Ok")}
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @cargo.errors, :status => :unprocessable_entity }
      end
    end
  end

  # PUT /cargos/1
  # PUT /cargos/1.xml
  def update
    @cargo = Cargo.find(params[:id])
    respond_to do |format|
      if @cargo.update_attributes(params[:cargo])
        @cargo.update_jerarquias(params[:jerarquias])
        flash[:notice] = 'Cargo actualizado correctamente.'
        format.html { redirect_to(@cargo) }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @cargo.errors, :status => :unprocessable_entity }
      end
    end
  end

  # DELETE /cargos/1
  # DELETE /cargos/1.xml
  def destroy
    @cargo = Cargo.find(params[:id])
    @cargo.destroy

    respond_to do |format|
      format.html { redirect_to(cargos_url) }
      format.xml  { head :ok }
    end
  end

  def list_competencias #IGNORE
    @cargo               = Cargo.find params[:id]
    @competencias_cargos = @cargo.competencias_cargos.paginate :page => params[:page], :per_page => 5
  end
  
  def datos #IGNORE
    #Parametros
    registros, count = find_by_params(params, :class => Cargo.activos)

    # Construct a hash from the ActiveRecord result
    return_data = Hash.new()
    return_data[:page] = params[:page]
    return_data[:total] = (count.to_f / params[:rows].to_i).ceil
    return_data[:records] = count

    return_data[:rows] = registros.collect{|u| {:id=>u.id,
      :cell=>[
        u.nombre, u.area.try(:nombre),u.valoracion
    ]}}

    # Convert the hash to a json object
    render :text=>return_data.to_json, :layout=>false
  end


  def toggle #IGNORE
    @cargo     =   Cargo.find params[:id] if params[:id]
    @add_cargo ||= Cargo.find params[:cargo_id]
    respond_to do |format|
      format.js
    end
  end

  def mark_as_autotest #IGNORE
    @cargo = Cargo.find params[:id]
    if params[:mark] == "true"
      Par.create(:par_id => @cargo.id, :cargo_id => @cargo.id, :es_autoevaluacion => true)
    elsif params[:mark] == "false"
      @par = Par.find_cargo_autoevaluacion(@cargo)
      @par.destroy if @par
    end
    respond_to do |format|
      format.js
    end
  end

  private
  
  def find_jerarquia
    @cargo          = Cargo.find(params[:id])
    @subordinados   = @cargo.cargos_subordinados
    @pares          = @cargo.cargos_pares # - [@cargo]
    @superiores     = @cargo.cargos_superiores
    @autoevaluacion = @cargo.autoevaluacion? ? @cargo : nil
  end


end

